/////////////////////////////////////////////////////////////////////////////
/*/	
*	Creator:		Joshua C. Rouzer
*	Title:			Shield cpp
*	Last Edited:	07/13/2013
*	Summary:		
/*/
/////////////////////////////////////////////////////////////////////////////
#include "Shield.h"
#include "Generator.h"
#include "CSGD_TextureManager.h"
#include "CSGD_XAudio2.h"
/////////////////////////////////////////////////////////////////////////////
// Function : 
// Notes	: 
/////////////////////////////////////////////////////////////////////////////
CShield::CShield( bool bTeamOne ) : CDefenseStruct(bTeamOne) {
	m_eType = GEN_SHIELD;
	bActive = true;

	// CHANGE - hard-coded positions
	if( bTeamOne )
	{
		SetImage( CSGD_TextureManager::GetInstance()->LoadTexture(_T("resource/Images/BlueShieldArt.png")) );
		SetPosX(0);
	}
	else
	{
		SetImage( CSGD_TextureManager::GetInstance()->LoadTexture(_T("resource/Images/RedShieldArt.png")) );
		SetPosX(750);
	}

	SetPosY( 250 );
	SetWidth( 50 );
	SetHeight( 300 );

	m_nShieldDestroy = CSGD_XAudio2::GetInstance()->SFXLoadSound(_T("resource/Sounds/ShieldDestroy.wav"));
	m_nShieldHit = CSGD_XAudio2::GetInstance()->SFXLoadSound(_T("resource/Sounds/ShieldHit.wav"));


	for(unsigned int i = 0; i < 3; ++i)
	{
		CGenerator* generator = new CGenerator(bTeamOne);
		generator->SetPosY(250 + 150*(float)i);
		m_vGenerators.push_back( generator );
	}
}
/////////////////////////////////////////////////////////////////////////////
// Function		: 
// Notes		: 
/////////////////////////////////////////////////////////////////////////////
CShield::~CShield(){
	for(unsigned int i = 0; i < m_vGenerators.size(); ++i)
		delete m_vGenerators[i];
	m_vGenerators.clear();
}
/////////////////////////////////////////////////////////////////////////////
// Function		: 
// Parameters	: dT - Time elapsed since last update
// Notes		: 
/////////////////////////////////////////////////////////////////////////////
void CShield::Update(float dT){
	for( unsigned int i = 0; i < m_vGenerators.size(); ++i )
		m_vGenerators[i]->Update(dT);
}
/////////////////////////////////////////////////////////////////////////////
// Function		: 
// Notes		: 
/////////////////////////////////////////////////////////////////////////////
void CShield::Render(){
	if( bActive )
	{
		CDefenseStruct::Render();

		for(unsigned int i = 0; i < m_vGenerators.size(); ++i)
			m_vGenerators[i]->Render();
	}
}
/////////////////////////////////////////////////////////////////////////////
// Function		: Upgrade
// Notes		: Increases stats based on level
/////////////////////////////////////////////////////////////////////////////
void CShield::Upgrade(){
	m_nLevel++;
	//Decrease chance of shooting through shield?
	//Call generators' Upgrade as well
	for(unsigned int iter = 0; iter < m_vGenerators.size(); iter++){
		m_vGenerators[iter]->Upgrade();
	}
}
/////////////////////////////////////////////////////////////////////////////
// Function		: 
// Notes		: 
/////////////////////////////////////////////////////////////////////////////
void CShield::RemoveGenerator( int index )
{
	if( bActive )
	{
		delete m_vGenerators[index];
		m_vGenerators.erase( m_vGenerators.begin() + index );
	}
}